package TankGame;

// 这段代码通过 GameLoader 类的静态方法 loadGame 使用 Java 的反序列化机制，
// 从指定文件中加载游戏状态（包括玩家坦克、敌方坦克、子弹、障碍物、玩家生命值和暂停状态），
// 并使用 try-with-resources 确保资源正确关闭，
// 同时捕获并处理可能的 IOException 和 ClassNotFoundException 异常。

// 设计思路是将游戏状态的加载功能封装在一个独立的类中，
// 利用 Java 的面向对象特性进行对象反序列化，
// 确保代码的模块化和可维护性。

import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.List;

public class GameLoader {
     // 从指定文件加载游戏状态。
     // gamePanel 包含游戏状态的 GamePanel 对象。
     // filePath  保存游戏状态的文件路径。
    public static void loadGame(GamePanel gamePanel, String filePath) {
        try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath))) {
            // 从文件中反序列化玩家坦克对象并赋值给 gamePanel
            gamePanel.playerTank = (Tank) ois.readObject();
            // 从文件中反序列化敌方坦克列表并赋值给 gamePanel
            gamePanel.enemyTanks = (List<EnemyTank>) ois.readObject();
            // 从文件中反序列化子弹列表并赋值给 gamePanel
            gamePanel.bullets = (List<Bullet>) ois.readObject();
            // 从文件中反序列化障碍物列表并赋值给 gamePanel
            gamePanel.obstacles = (List<Obstacle>) ois.readObject();
            // 从文件中读取玩家坦克的生命值并设置给 playerTank
            gamePanel.playerTank.setHealth(ois.readInt());
            // 从文件中读取游戏是否暂停的状态并赋值给 gamePanel
            gamePanel.isPaused = ois.readBoolean();
            // 打印成功加载游戏状态的消息
            System.out.println("Game state loaded successfully.");
            // 打印玩家坦克的生命值
            System.out.println("Player Tank Health: " + gamePanel.playerTank.getHealth());
            // 打印敌方坦克的数量
            System.out.println("Number of Enemy Tanks: " + gamePanel.enemyTanks.size());
            // 打印子弹的数量
            System.out.println("Number of Bullets: " + gamePanel.bullets.size());
            // 打印障碍物的数量
            System.out.println("Number of Obstacles: " + gamePanel.obstacles.size());
        } catch (IOException | ClassNotFoundException e) {
            // 捕获并打印 I/O 异常和类未找到异常的堆栈跟踪信息
            e.printStackTrace();
        }
    }
}
